package clientService;

import common.Message;
import common.MessageType;
import utils.Utility;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * @author lhn
 * @date 2024-05-03 12:47
 * 持续接收服务端消息的线程
 */

public class ClientConnectServerThread extends Thread{
    private Socket socket;

    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    public Socket getSocket() {
        return socket;
    }

    public void setSocket(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        //因为Thread需要和服务器进行通讯，使用while循环
        while (true) {
            try {
//                System.out.println("客户端线程，等待服务端中的消息...");
                ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
                Message message = (Message) objectInputStream.readObject(); //如果没有消息在此位置会被阻塞
                if (MessageType.MESSAGE_RET_ONLINE_FRIEND.equals(message.getMesType())) {
                    //服务端返回在线用户列表
                    String[] onlineUsers = message.getContent().split(" ");
                    System.out.println("\n========当前在线用户列表========");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("用户:" + onlineUsers[i]);
                    }

                } else if (MessageType.MESSAGE_COMMON_MESSAGE.equals(message.getMesType())) {
                    //接收普通的私聊消息
                    System.out.println(message.getSendTime() + ": 收到来自用户 " + message.getSender() + " 发送给我(" + message.getGetter()+ ")的消息:" + message.getContent());
                } else if (MessageType.MESSAGE_COMMON_MESSAGE_ALL.equals(message.getMesType())) {
                    //接收用户发给所有人的消息
                    System.out.println(message.getSendTime() + ": 收到来自用户 " + message.getSender() + " 发送给所有人的消息:" + message.getContent());
                } else if (MessageType.MESSAGE_FILE_MESSAGE.equals(message.getMesType())) {
                    //TODO  用户指定保存路径(实时输出保存路径由于使用控制台输入无法实现)
                    System.out.println("\n 收到" + message.getSender() + "给我发文件的请求");
                    System.out.println("\n" + message.getSender() + "给我发文件:" + message.getMyFile().getSrc()
                                + "到我的电脑目录:" + message.getMyFile().getDest());
                    //取出message的文件字节数组，通过文件输出流写到磁盘
                    FileOutputStream fileOutputStream = new FileOutputStream(message.getMyFile().getDest());
                    fileOutputStream.write(message.getMyFile().getFileBytes());
                    fileOutputStream.close();
                    System.out.println("\n 保存成功");

//                    System.out.println("\n 收到" + message.getSender() + "给我发文件的请求");
//                    System.out.print("\n 收到" + message.getSender() + "给我发文件的请求,是否接收(t or f):");
//                    String recFlag = Utility.readString(100);
//                    if ("t".equals(recFlag)) {
//                        System.out.print("\n 请输入文件保存的路径(形式d:\\\\yy.jpg):");
//                        String dest = Utility.readString(50);
//
//                        System.out.println("\n" + message.getSender() + "给我发文件:" + message.getMyFile().getSrc()
//                                + "到我的电脑目录:" + dest);
//                        //取出message的文件字节数组，通过文件输出流写到磁盘
//                        FileOutputStream fileOutputStream = new FileOutputStream(dest);
//                        fileOutputStream.write(message.getMyFile().getFileBytes());
//                        fileOutputStream.close();
//                        System.out.println("\n 保存成功");
//                    } else if ("f".equals(recFlag)) {
//                        System.out.println("已忽略文件接收");
//                    }

                } else if (MessageType.MESSAGE_OFFLINE_MESSAGE.equals(message.getMesType())) {
                    //登录查询离线留言
                    System.out.println("\n " + message.getSendTime() + ":接收到来自用户" + message.getSender() + "发送给我的离线留言:" + message.getContent());

                } else if (MessageType.MESSAGE_OFFLINE_FILE_MESSAGE.equals(message.getMesType())) {
                    System.out.println("\n 收到" + message.getSender() + "给我发送的离线文件");
                    System.out.println("\n" + message.getSender() + "给我发文件:" + message.getMyFile().getSrc()
                            + "到我的电脑目录:" + message.getMyFile().getDest());
                    //取出message的文件字节数组，通过文件输出流写到磁盘
                    FileOutputStream fileOutputStream = new FileOutputStream(message.getMyFile().getDest());
                    fileOutputStream.write(message.getMyFile().getFileBytes());
                    fileOutputStream.close();
                    System.out.println("\n 保存成功");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }
}
